package com.wkcto.springcloud.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
public class AuthFilter extends ZuulFilter {
    /**
     *返回的类型是过滤器的类型 类型决定了过滤器再哪个生命周期执行
     * pre表示在路由执行之前执行过滤器  其他值可以有post error route static
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     *  指定过滤器的执行顺序  多个过滤器按照顺序执行
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     *判断过滤器是否要执行
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 过滤器具体的过滤逻辑
     * 如果请求中携带了token参数的话，则认为是合法请求 否者非法请求
     * 首先设置ctx.sendZuulResponse(false)表示不对该请求进行路由
     * 然后设置响应码和响应值。这个run方法目前没有任何意义  可以返回任何值
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException{
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String token =  request.getParameter("token");
        int i = 1/0;
        if(token == null){
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            ctx.addZuulResponseHeader("content-type","text/html;charset=utf-8");
            ctx.setResponseBody("非法访问");

        }



        return null;
    }
}
